package de.oszimtcc.timetablehelper;

import java.io.IOException;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import de.oszimtcc.framework.Logger;
import de.oszimtcc.timetable.TimetableApplication;

import android.content.Context;
import android.preference.PreferenceManager;
import android.util.Log;

public class XMLfunctions 
{
	public final static Document XMLfromString(String xml)
	{		
		Document doc = null;
		
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try 
        {      	
			DocumentBuilder db = dbf.newDocumentBuilder();
			
			InputSource is = new InputSource();
	        is.setCharacterStream(new StringReader(xml));
	        doc = db.parse(is); 
	        
		} 
        catch (ParserConfigurationException e) 
		{
        	Logger.Error("XML parse error: " + e.getMessage());
			return null;
		} 
        catch (SAXException e) 
		{
        	Logger.Error("Wrong XML file structure: " + e.getMessage());
            return null;
		} 
		catch (IOException e) 
		{
			Logger.Error("I/O exeption: " + e.getMessage());
			return null;
		}
		       
        return doc;
        
	}
	
	/** Returns element value
	  * @param elem element (it is XML tag)
	  * @return Element value otherwise empty String
	  */
	 public final static String getElementValue( Node elem ) 
	 {
	     Node kid;
	     if( elem != null)
	     {
	         if (elem.hasChildNodes())
	         {
	             for( kid = elem.getFirstChild(); kid != null; kid = kid.getNextSibling() )
	             {
	                 if( kid.getNodeType() == Node.TEXT_NODE  )
	                 {
	                     return kid.getNodeValue();
	                 }
	             }
	         }
	     }
	     return "";
	 }
	 
	public static int numResults(Document doc)
	{		
		Node results = doc.getDocumentElement();
		int res = -1;
		
		try
		{
			res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue());
		}
		catch(Exception e )
		{
			res = -1;
		}
		
		return res;
	}

	public static String getValue(Element item, String str) 
	{		
		NodeList n = item.getElementsByTagName(str);		
		return XMLfunctions.getElementValue(n.item(0));
	}
}
